Skip to content

fix(plugin-core): align bundler resolution, roots and WASM diagnostics - #755

Draft
owjs3901 wants to merge 51 commits into
mainfrom
fix/plugin-core
Draft

owjs3901 wants to merge 51 commits into
mainfrom
fix/plugin-core

Conversation

@owjs3901

@owjs3901 owjs3901 commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Refs #686 (H 권장 항목, W20 H1/W20b/W20c/W20d). #743 위에 쌓은 PR이며 #743이 먼저 병합되어야 합니다. main a935315c(#747 포함)와 #743 4f1f953c를 통합했습니다. #752의 Next coordinator 작업과 독립적으로 검증합니다.

요약

WASM 경계, 모듈 resolver 및 Vite/Webpack/Rsbuild/Bun의 공통 동작을 수정합니다. Vite library/aggregate CSS는 실제 build input의 컴파일된 도달 closure가 완료된 뒤 정상 CSS 파이프라인으로 전달합니다. 스타일링 런타임, 의존성, private Vite adapter 또는 버전 pin을 추가하지 않습니다. #747의 네 보호 영역은 그대로 유지하며 main은 pre, MDX companion은 post/transform-only입니다.

동작 및 항목 상태

항목 H1 상태
INF-06 수정: JS export도 source map 생성 생략, map === undefined 검증
INF-07 수정: null/undefined와 callback/getter/변환 오류를 구분하고 파일·cause 보고, 실패 시 sheet 유지
INF-08 수정: WASM 초기화 panic hook이 Rust 위치·payload를 보고. abort trap을 일반 오류로 변환했다고 주장하지 않음
PLG-05 수정: include 이름을 literal로 escape하고 scoped/unscoped 및 innermost node_modules 경계 검사
PLG-06 수정: .mts/.cts/.mjs/.cjs/일반 .js 및 컴파일 후 MDX 처리, 원래 MDX 파일명 유지
PLG-09 수정: 빈 theme 선언도 덮어써 이전 토큰 제거
PLG-11 수정: tsconfig extends·배열·package 설정과 paths/baseUrl 선언 위치 및 덮어쓰기 의미 반영
PLG-12 수정: bundler 활성 조건과 exports 선언 순서 반영, Bun target/custom 조건 실제 출력 비교
PLG-13 수정: src/app/custom/실제 entry roots와 include의 도달 가능한 closure, graph exclude 지원
PLG-18 수정: Vite root, compiler.context, Rsbuild root 및 Bun root를 기준으로 옵션·resolver 정규화
PLG-19 수정: 설정 읽기/JSON/extends cycle 오류에 파일·cause 보고, 상속 깊이 제한
PLG-20 수정: Bun build-time dependency import를 명시적 graph edge로 유지, 실제 watch 변경 검증
PLG-21 수정: splitChunks 기본값에도 공유 cache group 생성, false와 atomHoist 조합 오류
PLG-22 수정: precompiled/consumer include 계약 및 library aggregate CSS 완전성. 공개 훅으로 정확하지 않은 구성은 위치 지정 오류
PLG-27 수정: 요청한 graph/prewarm/hoist 실패를 드러내며 optional seed fallback은 결정론 영향과 cause 경고
PLG-28 수정: transform마다 include regex를 다시 만들지 않음
PLG-29 수정: Bun runtime/build 모두 debug 기본 false, snapshot preload는 명시적으로 true
PLG-23 수정: 한 graph를 canonical/reach/prewarm 소비자가 공유
PLG-24 동일 CSS 리비전 쓰기 억제. 변경 리비전의 동기 I/O는 runtime read-after-import 계약상 유지

추가 수정: dotted relative specifier와 dotted directory index, MDX provider를 통해 도달하는 JS 및 included package JS closure, Rsbuild 첫 mkdir/write 순서를 수정했습니다. Next 변경은 승인된 테스트 정렬뿐이며 production 코드는 변경하지 않았습니다. graph와 numbering의 includeMdx는 기본 false이고 각 MDX 플러그인은 자기 compiler가 실제 처리하는 확장자 목록만 전달합니다.

Library CSS 및 CI 회귀

  • 모든 generated CSS load가 환경별 준비 promise를 공유합니다. 공개 this.resolve/this.load/ModuleInfo로 실제 input, dynamic import, virtual/post-injected import 및 plugin-emitted input을 방문하며 CSS load 자체를 기다리는 순환은 피합니다. source tree 전체를 추출하지 않습니다.
  • generated import의 원래 위치를 유지하고 vite:css-post 이전에 완전한 CSS를 제공합니다. foreign red → Devup green → foreign blue의 동일 @layer b 회귀에서 실제 optimizer 승자는 blue입니다. 늦은 asset splice는 사용하지 않습니다.
  • watcher 테스트는 실제 watcher를 닫은 뒤 정확한 파일·parse cause·이전 theme/CSS를 검증합니다. Webpack entry는 inline loader의 실제 resource/query를 정규화하며 virtual/pitch-only request는 stat하지 않습니다. 실제 I/O 오류는 숨기지 않습니다.
  • Next 실제 cold build 감사에서 새 MDX seed 18개가 추출되지 않음을 확인했습니다. numbering을 수정해 seed 116→98, 실제 추출 178개, 제목 af-a … af-f→o-a … o-f로 복원했습니다. 기존 zero-runtime E2E regex는 수정하지 않았습니다.
  • 동일 source/WASM의 numbering-only 비교에서 CSS 50,721→49,849 bytes, JS 759,750→759,110 bytes로 각각 872/640 bytes 감소하며 feat(plugins): deterministic class and file numbering #743 numbering 기준과 같습니다. 전체 역사적 feat(plugins): deterministic class and file numbering #743/이 PR build의 비용 비교라고 주장하지 않습니다.
  • Bun 구현을 비공개 내부 factory로 분리하고 실제 파일/captured callback 테스트를 추가했습니다. 기존 plugin.ts 측정 제외를 완전히 제거했고 등록 wrapper도 100%입니다. 공개 exports/ESM await/CJS 동작은 유지합니다.

W21c 공유 API 추가

  • includeMdx: boolean | readonly string[]를 graph/scanner/numbering에 공통 적용합니다. 기본은 모두 off, true는 .mdx만, 목록은 .md, .mdown 등 caller compiler가 처리하는 literal 확장자만 선택합니다. listSourceFiles(srcDir, exclude, options)는 기존 두 인자를 유지합니다.
  • prepareSource(realAbsoluteFilename)은 string 또는 {code,map}/undefined를 동기·비동기로 반환합니다. Hook 없는 graph는 기존 synchronous 결과, hook을 제공한 graph는 항상 Promise입니다. undefined만 raw file을 읽으며 compiler-injected provider/remark/rehype imports를 실제 파일 기준으로 해석합니다.
  • alias는 string·false 또는 순서 있는 string/false 후보 배열을 받으며 tsconfig/native package 해석보다 먼저 적용합니다. $ exact, segment subpath, 선언 순서, self/chain/cycle 및 각 후보의 완전한 해석을 설치된 enhanced-resolve 5.25.1과 실제 파일로 비교했습니다. 도달한 false는 즉시 {ignored:true}이고 앞선 실제 파일 후보가 해석되면 그 후보가 우선합니다. 문자열 후보는 alias map을 다시 거치며 target과 같거나 그 아래인 요청은 다시 alias하지 않습니다. 모두 실패하면 importer 위치·key·후보를 보고하고 원래 request로 되돌아가지 않습니다. Wildcard는 기존 지원 범위 밖입니다.
  • Ignored 결과는 path/code/sourceType이나 가짜 파일이 없고 해당 getter·preparer·toId·parser를 호출하지 않습니다. 평가에서는 빈 CommonJS exports, 없는 named 값은 undefined, default는 기존 CJS interop, namespace/require는 빈 객체입니다. Graph/numbering/watch에 ignored 파일을 만들지 않으며 기존 실제 파일 enumeration은 유지합니다. 실제 Next client instrumentation fallback의 absent/root/src·새 앞선 파일 생성·chain/selfguard와 실제 WASM 양 extraction API를 검증합니다.
  • 설치된 enhanced-resolve AliasUtils.js:239–249는 reached false를 처리하지만 ResolverFactory.js:181–183은 mixed string/false 배열을 handler 이전에 TypeError로 거부합니다. 공유 resolver는 AliasUtils의 의미를 구현하며 Webpack은 자신의 factory 오류로 먼저 중단합니다. Rspack은 native map에서 mixed false 배열을 지원하고 첫 성공·false·빈 배열·terminal 실패 의미를 실제 resolver로 비교했습니다. Vite의 native alias 형식에는 false target이 없습니다.
  • **fce47fe9**에서 기존 ModuleAliases map 타입을 유지하고 ModuleAliasOptions에 순서 있는 {name,alias,onlyModule?} descriptors/native false를 추가했습니다. Map trailing $는 exact이고 descriptor의 literal $와 onlyModule:false는 prefix입니다. 중복 첫 rewrite 실패는 설치된 AliasUtils.js:307–313처럼 terminal이며 뒤의 false/실제 파일로 우회하지 않습니다. Selfguard-only/빈 배열은 rewrite가 없어 다음 항목·raw request로 진행합니다. 기존 empty-map 오류는 native fallthrough로 변경했습니다. Webpack의 graph/setup/loader/cache와 Rsbuild의 native map-or-false를 같은 옵션으로 lossless 전달하며, 실제 native bundle 선택 결과 10개·root 6748/0·132개 소스100/100·build/nativeTS/lint/protected/WASM을 검증했습니다.
  • numbering의 exclude도 graph/scanner와 같은 matcher를 사용합니다. bare directory name은 모든 깊이, absolute path는 해당 directory/하위만 제외합니다. Windows separator/drive/path case를 정규화하며 같은 basename의 다른 source folder는 유지합니다. 제외된 manifest/source는 읽기 전에 차단합니다.
  • Graph는 import scanner이며 전체 syntax validator가 아닙니다. 같은 compiled output의 구문 검증은 caller compiler/bundler가 담당합니다. Hook 오류/cause는 실제 파일로 보고하며 source map이 있으면 위치를 remap하고 없으면 (in compiled output)으로 표시합니다. 문자열·template text·주석·regex·JSX text의 예제 imports는 edge나 resolution attempt가 되지 않습니다.
  • createModuleResolver도 같은 prepared hook을 동기적으로 사용하며 remapError(error)를 가진 callable을 반환합니다. Thenable 또는 미준비 .mdx/.md/선택된 Markdown은 importer:1:1·module·cause·JS/TS 대안의 오류이며 raw Markdown을 WASM에 넘기지 않습니다. Prepared caller는 모든 codeExtract 오류를 remapError로 보내야 합니다. Store는 resolver instance/current generation과 실제 WASM id에 연결되며 모든 위치를 map 또는 compiled-output label로 처리합니다.
  • #755만으로는 WASM이 prepared module 내부 위치를 보고하지 않으며 실제 invalid imported value는 importing TSX 위치를 유지합니다. Remapper는 그 원문 위치를 바꾸지 않습니다. Synthetic extractor-format diagnostics와 실제 MDX compiler map의 계약 테스트가 현재 mapping/idempotence/generation을 검증하며, #757에서 imported-module 위치가 도입된 뒤 두 PR이 main에 있을 때 실제 end-to-end mapping 검증을 수행하도록 통합 항목이 예약됐습니다. fix(extractor): locate diagnostics and enforce deterministic evaluation #757 코드를 merge/cherry-pick하지 않습니다.
  • e8abf152에서 parser-independent edge extraction을 완료했습니다. 모든 edge는 하나의 무의존성 scanner가 결정하며 optional Oxc는 syntax diagnostics만 제공합니다. AST/program getter는 edge를 바꾸지 않습니다. template ${...}/nested template 및 JSX attribute/child braces 안의 literal import/require는 발견하고, 문자열·template text·주석·regex·JSX text와 비literal 인자는 edge가 아닙니다.
  • JSX는 실제 source language가 허용하는 expression 시작에서만 인식합니다. 비교·shift·복합 연산자, TS type assertion·generic call, TSX generic arrow를 JSX로 오인하지 않습니다. 타입 전용 import와 runtime typeof import()를 구분하고 ASI·return annotation·grouped ternary·generic ambient signature·for-await regex·type as binding 회귀를 추가했습니다. 독립적인 실제 Oxc AST 비교에서 발견한 유효 문법 차이는 기대값을 바꾸지 않고 모두 수정했습니다.
  • 179fa6d3에서 extraction의 optional ninth sourceType: 'compiled-mdx'와 prepared/resolved module의 같은 field를 추가했습니다. 실제 .mdown 파일명으로 JS+JSX를 파싱하며 alias·imported constants·reexport·module evaluation·strip cache까지 타입을 전달합니다. Child가 importing source의 타입을 상속하지 않고 자기 파일/명시 타입을 사용합니다. Invalid type/getter와 override 없는 unknown extension은 no-import fastpath에서도 위치 지정 오류이며 실패한 sheet를 publish하지 않습니다.
  • 보통 TSX가 가져오는 실제 compiler의 .md JSX 값은 jsx:false/true·child type 기본/명시·map/no-map 8가지 부모 검증에서 모두 정적 blue CSS입니다. 기존 38개 실제 compiler/WASM 회귀와 확장 52개 검증도 통과했습니다. 각 plugin의 동일 mdxExtensions 목록·ninth argument·확실히 사용되는 binding guard를 연결하며 완료 전에는 ready로 전환하지 않습니다.

MDX 선택과 확실한 사용 가드

플러그인 mdxExtensions의 기본값은 ['.mdx']이며 .md와 .mdown 같은 literal 확장자는 opt-in입니다. 실제 compiler가 처리하는 같은 목록을 transform/filter/graph/resolver/numbering에 전달합니다. Vite/Webpack/Rsbuild는 프로젝트 compiler 이후의 JavaScript/JSX를 실제 파일명으로 추출하고, Bun은 프로젝트의 @mdx-js/mdx로 직접 컴파일합니다. Bun의 선택된 MDX는 내용이 평범해도 compiler가 없으면 위치 지정 오류입니다.

Vite 반환 목록은 main devup-ui, 기존 devup-ui:restore-forwarded-css, 그리고 독립적인 세 companion인 devup-ui:mdx, devup-ui:aggregate-css-guard, devup-ui:compiled-source-guard입니다. main pre와 #747 네 영역을 유지하고 MDX는 post/transform-only입니다. 별도 컴파일 가드와 aggregate CSS 검사 책임을 합치지 않습니다.

최종 코드의 사용 형태 Vite build/build-watch Webpack build/dev/watch Rsbuild/Rspack build/dev/watch Bun.build/watch callbacks
지원 밖 확장자의 used Box/compile-time named binding AST·실제 target에 따른 위치 지정 오류 실제 used IDs/target에 따른 오류 실제 used IDs/target에 따른 오류 Devup이 소유한 확장자의 loader 실행 보장
unused import·runtime helper 허용 허용 허용 위반으로 판정하지 않음
namespace/require의 정적 compile-time member 확실한 AST reference는 오류 export IDs가 확인되면 오류 export IDs가 확인되면 오류, native CJS dependency에 IDs가 없으면 opaque 허용 소유 확장자 자체를 컴파일
정적 namespace/require destructuring 확실한 AST reference는 오류 dependency에 export IDs가 있으면 오류 ids=[]로만 관찰되면 opaque 허용 소유 확장자 자체를 컴파일
whole namespace/require result·dynamic import opaque 허용 opaque 허용 opaque 허용 다른 loader의 최종 코드는 관찰할 수 없음
renamed forwarding 공개 graph로 확실히 추적되면 오류 공개 graph로 확실히 추적되면 오류 공개 ExportsInfo로 추적 불가능한 형태는 opaque 허용 다른 loader의 target 관찰 한계
active compatibility alias binding compile-time target 사용은 오류 compile-time target 사용은 오류 확실한 used ID는 오류 지원 코드의 기존 alias 추출

Runtime entry의 setTheme/getTheme/initTheme/useTheme/ThemeScript 등은 가드 대상이 아닙니다. 이름·정적 member·destructuring으로 확실히 사용한 compile-time export만 오류로 판정하고, 일반 JS/TS의 include 제외와 의도된 extractCss:false publishing 범위는 넓히지 않습니다. Runtime alias를 원하면 해당 compatibility importAliases[package]=false를 사용합니다. Rspack finishModules에서는 provided exports를 조회하지 않습니다.

가드 감사의 실행 subexpression·literal-computed destructuring·require origin 누락은 실제 final-code RED→GREEN 회귀로 수정했습니다. 부모 root 6696/0, 132개 소스 각각 함수·라인100%, 실제 Rsbuild/Bun checkpoint, root build/native/lint 및 보호 영역 비교를 통과했습니다. Rspack의 실제 cjs full require/cjs require는 member/bound/destructuring에서 export IDs를 제공하지 않음을 별도 실빌드로 확인했으며 이 경우를 opaque 한계로 기록합니다. 이후 false alias·raw request evidence·jsxDEV 및 최종 head 검증은 아직 진행 중입니다.

새로 생기는 오류

  • 잘못된/읽을 수 없는 설정, 상속 cycle·깊이 제한, 잘못된 tsconfig·package manifest: 파일과 원인
  • resolver callback/property/reflection 오류 및 잘못된 {path,code}: importer:1:1: module resolver cannot use ... at build time: cause (callback 계약에 span 없음)
  • raw/잘못된 MDX 또는 추출 확장자: 파일·줄·열. compiler map이 있으면 원문으로 매핑하며 없으면 (in compiled MDX) 표시
  • Bun이 소유한 MDX의 compiler 부재(plain MDX 포함): 실제 filename·@mdx-js/mdx 설치 안내
  • 요청한 graph/prewarm/hoist 실패 및 Rsbuild splitChunks:false: 단계·root·파일·cause
  • aggregate CSS의 공개 input/resolve/load/parser가 거부되거나 불완전할 때: 책임 source/stylesheet·asset 및 동작 가능한 설정 대안
  • 실제 transform 이후에도 남는 계산된 dynamic import, 준비 이후 추가된 module: 위치 지정 오류. literal import/import.meta.glob 또는 별도 precompiled CSS 사용
  • source transform이 generated CSS를 기다리는 순환 등으로 public load가 30초 안에 완료되지 않을 때: 위치 지정 오류. 매우 느린 정상 compiler도 이 제한에 도달할 수 있음
  • split library가 보호된 shared-sheet 계약상 optimizer 결과를 유지할 수 없는 standalone generated CSS를 낼 때: 실제 최종/hash asset명과 build.cssCodeSplit:false 대안
  • prepared hook 실패 및 optional parser syntax diagnostics: 실제 filename·cause, map에 따른 원문 위치 또는 명시적인 compiled-output 위치. Parser 예외를 다른 edge scanner로 fallback하지 않습니다. Alias cycle/모든 후보 실패는 실제 importer:1:1·key·후보의 오류
  • 잘못된 root/resolved/prepared source type, type getter 실패, 명시 타입 없는 unknown extension(스타일 import가 없어도): 실제 파일/importer·줄·열·cause. 기존 stylesheet contribution 유지
  • 잘못된 mdxExtensions pattern/nonliteral 값: 확장자 option 위치와 literal leading-dot 대안
  • 지원 밖 확장자에서 확실히 사용한 compile-time export/active alias: 실제 module/import/export와 mdxExtensions·compiler 대안. Alias disabling 대안은 실제 active compatibility alias에만 제시
  • Bun에서 도달한 소유 MDX를 다른 loader가 먼저 처리: 실제 importer:1:1·target·extension 및 Devup compiler 소유 또는 목록 제외 대안
  • 공유 resolver가 표현하지 못하는 wildcard alias name: 실제 importer:1:1·key·해당 형식의 설정 오류. 조용히 무시하지 않음

남는 한계 및 후속 작업

  • 실제 검증 버전은 Vite 8.3.1/Rolldown 1.2.10이며 ES library, split library 및 non-library cssCodeSplit:false 구성입니다. 다른 버전의 public seam이 완전한 ModuleInfo를 주지 않으면 조용히 부분 CSS를 내지 않고 오류를 냅니다.
  • 추가 plugin-emitted entry가 있는 일부 split library는 standalone generated CSS를 만들므로 정확한 출력을 보장할 수 없습니다. 실제 asset을 감지해 오류를 내며 동일 library의 cssCodeSplit:false는 실빌드로 검증했습니다. 일반 split application 및 dev는 기존 동작을 유지합니다.
  • aggregate closure 위치는 공개 transformed ModuleInfo code를 기준으로 하며 private source-map 접근을 하지 않습니다. 계산된 import는 literal/import.meta.glob으로 바꿔야 하고 늦은 plugin input은 첫 generated CSS load 이전에 노출해야 합니다.
  • 같은 source를 서로 다른 conditional environment 값으로 추출할 때 class 이름이 순서에 따라 바뀌는 core 문제를 발견하여 W31로 전달했습니다. W20은 libs/css naming을 변경하지 않습니다.
  • panic=abort는 여전히 trap이며 hook은 진단만 제공합니다. Bun runtime의 새 styling module/include 변경은 재시작이 필요합니다.
  • Bun plugin API의 구분 불가능한 경우: Devup이 소유하지 않은 확장자를 다른 plugin이 로드하고 불투명한 resolver가 Devup 대상을 숨기면, 공개 API는 loader chaining이나 최종 resolve target을 제공하지 않습니다. 동일한 public request stream의 무해한 Box와 Devup placeholder를 실제 세 빌드로 재현했으며 plugin 순서로도 일반적으로 해결되지 않습니다. 이런 보이지 않는 module의 Devup 컴포넌트는 render 시 Cannot run on the runtime을 낼 수 있습니다. 확장자를 mdxExtensions에 넣고 별도 MDX plugin 대신 Devup이 project compiler로 컴파일하게 해야 합니다. 무해한 프로그램까지 보수적으로 거부하거나 새로운 alias adapter 계약을 추가하지 않습니다.
  • Whole namespace/require result·dynamic import는 실제 사용하는 export가 opaque이므로 모든 플러그인에서 허용합니다. Rspack은 ids=[] destructuring과 공개 export data로 추적 불가능한 renamed forwarding도 허용합니다. 숨겨진 compile-time export가 실행되면 runtime placeholder 오류가 남을 수 있으므로 Devup이 해당 확장자를 컴파일하게 해야 합니다. 같은 source라도 Webpack의 dependencies가 export IDs를 제공하면 오류입니다.
  • Vite 가드는 moduleParsed/buildEnd가 완성한 forwarding graph를 사용하므로 build/build-watch 전용입니다. Serve에는 같은 완료 graph가 없으며 지원 밖 확장자는 개발 render 시 placeholder 오류를 낼 수 있습니다. Dev와 build 모두 compiler와 mdxExtensions를 구성해야 합니다. Webpack/Rspack compilation 가드는 dev/watch에서도 같은 final dependencies를 사용합니다.
  • Bun runtime registration에는 build onEnd/defer finalization이 없으므로 전체 build ownership 보장을 주장하지 않습니다. Build onEnd 오류는 output write 이후에도 발생하고 throw:false에서도 reject하므로 성공한 build 결과만 publish해야 합니다. Ownership 위치는 실제 importer:1:1 fallback이며 structured CSS 위치는 virtual stylesheet일 수 있습니다.

검증

  • 최신 scanner exact-tree hook 및 부모 root bun test: 6585 pass / 0 fail, Bun 내부 구현·등록 wrapper와 Vite helper를 포함해 120개 파일 각각 함수·라인 100%, Bun 측정 제외 없음
  • 실제 Bun runtime/build/watch/custom condition: 33 pass / 0 fail, normal cache 유지. Windows fixture는 realpathSync.native() 사용
  • cargo test --workspace, fmt, Rust1.99 clippy 통과. CI 37197131055 및 37206093044 publish에서 Rust wide-format 전 파일 100% 검증
  • 모든 커밋 실제 pre-commit 실행; root WASM/전체 package build 및 lint 통과, 기존 경고 2개만 유지
  • 실제 MDX3 default _jsx 및 jsx:true, Emotion alias, source map 생략, resolver getter/proxy/잘못된 반환 검증 통과
  • 실출력: MDX <Box color="red"/> → native <div className="a"/>, .a{color:red}; 정적 width=4*2 → .a{width:32px}; resolver fault는 이전 sheet를 바꾸지 않음
  • lint 기존 경고 2개 외 없음. LSP 미설치/daemon timeout으로 native compiler 검사 사용
  • fix(vite-plugin): keep server page css dependencies in vinext/RSC builds #747 네 보호 영역 byte 비교 통과. 일반 apps/vite JS/CSS/HTML filename·SHA256가 수정 전과 동일
  • local vinext RSC Playwright: per-file 29 pass, singleCss 29 pass. 정상 서버 종료 및 orphan 없음
  • 실제 library matrix 12개: 양 CSS mode/transform order, multi-entry, JS/CSS cycle, MDX, .css.ts constants, dynamic/virtual/post-injected edge, unreachable 제외, CSS imports/URL 및 custom hash names. unsafe split asset 4개 fail-closed 회귀 및 실제 30초 순환 오류도 검증
  • 실제 Next cold export의 수정하지 않은 zero-runtime Playwright 6 pass. computed import 오류와 동작 가능한 nonaggregating 대안 모두 실빌드 검증
  • checked-in scanner corpus: 기존 377개에 새 type helper 1개를 더한 378개(package source147/landing source138/실제 project compiler의 docs93), 전체 graph parity·diagnostic378회·production AST getter0회. 자연 corpus의 resolved dynamic edge는0이며 별도 독립적인 filesystem 회귀로 dynamic/import/require를 검증합니다.
  • 별도 실제 Oxc0.127.0 Visitor 기준 576개 입력, parse error0/edge divergence0. 기존 transitive Bun store의 parser/native binding을 검증 도구로만 읽었으며 의존성이나 production parser를 추가하지 않았습니다. 필수 foreground Oracle의 6개 발견은 각 RED→GREEN 및 부모 11개 직접 재현으로 닫았습니다.
  • Source-type core 실제 exact-tree hook: 6596 pass/0 fail, 121개 파일 각각 함수·라인100%. Rust workspace 2169 tests, fmt·Rust1.99 clippy·WASM/전체 build·native binding/util types 통과. Native Windows tarpaulin은 기존 multiline/closure mapping gaps 때문에 **98.05%(13485/13753)**이며 새 source_type27/27·binding155/155입니다. Core CI 37338236710의 Linux wide-format Rust fail-under100과 Bun100 게이트가 모두 통과하여 실제 gap이 아님을 확인했습니다. Native100%라고 주장하지 않습니다.

CI 상태

최초 37197131055의 세 실패와 37206093044의 불필요한 MDX numbering을 수정했습니다. 공유 API·alias arrays의 수정된 head 03d8e845에서 CI 37244998963은 publish·benchmark·landing-next-e2e·vinext-rsc-css-e2e 모두 SUCCESS입니다.

Scanner head e8abf152의 CI 37262976654는 Codecov 외부 장애로 FAILURE입니다. Benchmark·Next E2E·vinext RSC 작업은 모두 SUCCESS이며 publish의 build·package entry/tarball 검증·lint·Rust100 threshold/Bun tests·preload 회귀·landing 양 CSS mode build/E2E까지 모두 통과했습니다. 유일한 실패는 Upload to codecov.io에서 CLI 다운로드의 curl (35) SSL handshake failure와 누락된 GPG signature입니다. 이후 housekeeping/changepack 단계는 실패 때문에 skip되어 실행했다고 주장하지 않습니다. 외부 장애 규칙에 따라 workflow 변경이나 반복 rerun을 하지 않으며 복구 후 코디네이터가 실패 작업을 다시 실행합니다.

Source-type core head 179fa6d3의 CI 37338236710은 네 작업 모두 SUCCESS이며 Codecov upload·clean publish checkout·changepack 단계까지 통과했습니다. 외부 서비스 복구 후 새 head의 정상 CI가 검증된 것이며 outage를 workflow 변경이나 검증 생략으로 우회하지 않았습니다. 플러그인 연결과 문서/Patch의 최종 head CI는 완료 후 별도 확인합니다.

  • Guard checkpoint **a6a094dd**를 29개 source/test whole-file exact-tree 절차로 push했습니다. 실제 hook과 부모 rerun은 **6696/0, 132개 파일 각각 함수·라인100%**이며 실제 Bun.plugin custom MDX render는 <div class="a"></div>와 .a{background:red}입니다. CI **37370860168**의 publish 111967335703은 SUCCESS이며 build/package entry/tarball·lint·Linux Rust 100%(9902/9902)/Bun 6696/0·각 소스100%·preload 8/0·landing 양 mode build/E2E·Codecov·cleancheckout·changepack까지 통과했습니다. Benchmark 111967335385, vinext RSC 111967335646, Next 111967335735는 hosted runner 미배정으로 0steps CANCELLED이며 세 작업 모두 annotation The job was not acquired by Runner of type hosted even after multiple attempts를 확인했으므로 전체 green을 주장하지 않습니다. 외부 장애 규칙에 따라 workflow 변경이나 반복 rerun 없이 기록하고 코디네이터가 복구 후 해당 작업을 rerun합니다.
  • 첫 map-only false alias core **28dc9a11**를 19개 whole source/test exact-tree 절차로 push했습니다. 실제 hook과 부모 rerun은 6721/0, 132개 소스 각각 함수·라인100%, 실제 ignored 양 API·기존 boundary·sourceType52 검증 통과입니다. Oracle가 지적한 inherited named export·lexical undefined shadow·실제 CJS prototype 세 사례를 부모가 양 API에서 RED로 재현하고, typed IgnoredObject·scope-independent void0·real Record 동작 보존으로 GREEN을 확인했습니다. 같은 Oracle의 outcome 재검토는 원래 세 blocker 해제를 APPROVE했습니다. LSP 미설치/daemon timeout은 native build/1.99 clippy/workspace tests로 검증했으며 LSP-clean이라고 주장하지 않습니다. CI **37393489474**의 Next·RSC·benchmark는 SUCCESS이고 publish는 실제 Rust coverage **99.97%(9951/9954)**로 실패했습니다. imported_constants.rs의 wide-format 83/1240/1516 세 줄(ignored literal serialization/spread/AST object)을 매핑했으며 native 회귀 보강을 진행합니다. 외부 장애나 phantom으로 처리하지 않고, coverage 제외/threshold 완화 없이 새 커밋으로 수정합니다.
  • Linux native 커버리지의 세 경로 보강 **93846b90**를 별도 whole-file 테스트 커밋으로 push했습니다. Native 12개 focused test와 실제 hook의 extractor 1453, Bun 6721/0을 통과했으며 새 Linux coverage 결과는 별도 확인합니다. Descriptor checkpoint **fce47fe9**도 12개 paired source/test exact-tree·실제 hook **6748/0·소스별100%**로 push했습니다.
  • 최종 상태: scanner·explicit source-type core·plugin guard·ignored alias·coverage 보강·native descriptors 옵션 연결은 push 완료입니다. Raw request evidence, jsxDEV 및 문서/Patch·최종 CI를 진행하는 draft이며 아직 ready/전체 완료를 주장하지 않습니다.

owjs3901 and others added 30 commits October 1, 2026 01:50
…nd StyleX imports

The generated stylesheet always resolved to an empty module, so Bun.build dropped every style, and the pre-parse gate only accepted import declarations of @devup-ui/react, so files using the alias packages, StyleX, subpaths or re-exports ran the runtime stubs. DevupUI() now serves the complete sheet to the CSS loader after defer(), and the gate reads the real imports with Bun.Transpiler.scanImports.

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… built stylesheets

A stylesheet module is built on its first import, and the shared base is read from disk past the plugin, so styles extracted later were missing from webpack and Rsbuild output; Rsbuild also served a module-wide string kept only when it grew. The files the entries reach are now extracted before the build, the base on disk is kept current, and a compilation whose stylesheets changed is run once more, writing only the complete result. Rsbuild serves each stylesheet from the current sheet.

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…into feat/deterministic-numbering

# Conflicts:
#	packages/next-plugin/src/loader.ts
…ing order

Refs #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… forwarding alone

Refs #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #694, #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…orwarding

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 and others added 2 commits October 4, 2026 22:18
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Changepacks

@devup-ui/wasm@1.0.83 → 1.0.84 - bindings/devup-ui-wasm/package.json

Patch

  • Class names and file numbers no longer depend on the order files are processed in. Every plugin walks the files it can extract (the project's source and the included packages) before the first transform and numbers them in path order (a file collapsed into a bucket is numbered as the bucket, and only files that mention the package, StyleX or an aliased package take numbers) through the new seedFileMap, so identical builds give identical class prefixes, CSS file names and output hashes; in development, files that appear later are numbered after the existing ones. Styles are given class names in a fixed order, not the order of a hash set. The exported class, file and canonical maps are canonical JSON (sorted keys). Stylesheet evaluation (vanilla-extract) refuses Math.random(), Date.now(), new Date() and Date(), which differ between builds, with a build error; fixed dates such as new Date(0) are unchanged. resetBuildState starts a build from its own options: the prefix, atom hoisting, routes, buckets, names, numbers and styles an earlier build in the process left are cleared, and the prefix is set on every setup even when it is absent. Engine snapshots from concurrent transforms are written one after another per file, so an older snapshot is never written last. File lists are ordered by code point rather than the locale
  • Use bundler project roots and active export conditions for build-time module resolution, resolve inherited tsconfig paths and dotted module specifiers, transform modern modules and compiled MDX, match included packages literally, and refresh empty theme declarations. Skip unrequested source maps, surface resolver faults before stylesheet mutation, and report WASM panic locations. Malformed or cyclic configuration, resolver failures, requested graph/prewarm failures and disabled Rsbuild shared splitting now stop builds with context; optional numbering fallback warns about its deterministic impact. Bun defaults to compact names and retains imported build-time dependency watch edges.
  • Extract compiled MDX with its real source filename, including JSX-preserving alias imports and exact static computations. Raw or invalid MDX and unsupported extraction extensions now produce located build errors instead of untransformed styling placeholders.

@devup-ui/bun-plugin@1.0.22 → 1.0.23 - packages/bun-plugin/package.json

Patch

  • Bun plugin works with Bun.build: DevupUI() (from @devup-ui/bun-plugin/register) serves the generated stylesheet to the bundler's CSS loader once every other module is loaded, so the build emits a CSS output with the styles of the whole bundle instead of an empty module; class names are short there and readable under the runtime (debug option). Files importing the packages Devup UI takes the place of (@emotion/react, @emotion/styled, styled-components, @vanilla-extract/css), @stylexjs/stylex, or a subpath or re-export of these or @devup-ui/react, are compiled instead of skipped
  • Class names and file numbers no longer depend on the order files are processed in. Every plugin walks the files it can extract (the project's source and the included packages) before the first transform and numbers them in path order (a file collapsed into a bucket is numbered as the bucket, and only files that mention the package, StyleX or an aliased package take numbers) through the new seedFileMap, so identical builds give identical class prefixes, CSS file names and output hashes; in development, files that appear later are numbered after the existing ones. Styles are given class names in a fixed order, not the order of a hash set. The exported class, file and canonical maps are canonical JSON (sorted keys). Stylesheet evaluation (vanilla-extract) refuses Math.random(), Date.now(), new Date() and Date(), which differ between builds, with a build error; fixed dates such as new Date(0) are unchanged. resetBuildState starts a build from its own options: the prefix, atom hoisting, routes, buckets, names, numbers and styles an earlier build in the process left are cleared, and the prefix is set on every setup even when it is absent. Engine snapshots from concurrent transforms are written one after another per file, so an older snapshot is never written last. File lists are ordered by code point rather than the locale
  • Use bundler project roots and active export conditions for build-time module resolution, resolve inherited tsconfig paths and dotted module specifiers, transform modern modules and compiled MDX, match included packages literally, and refresh empty theme declarations. Skip unrequested source maps, surface resolver faults before stylesheet mutation, and report WASM panic locations. Malformed or cyclic configuration, resolver failures, requested graph/prewarm failures and disabled Rsbuild shared splitting now stop builds with context; optional numbering fallback warns about its deterministic impact. Bun defaults to compact names and retains imported build-time dependency watch edges.

@devup-ui/components@0.1.60 → 0.1.61 - packages/components/package.json

Patch

  • Auto-update: depends on '@devup-ui/vite-plugin' via a local workspace dependency

@devup-ui/next-plugin@1.0.90 → 1.0.91 - packages/next-plugin/package.json

Patch

  • Isolate the coordinator port file per owning process when another live next dev/build holds it, record the owner pid, and report port, pid and recovery when the coordinator is missing or unreachable
  • Class names and file numbers no longer depend on the order files are processed in. Every plugin walks the files it can extract (the project's source and the included packages) before the first transform and numbers them in path order (a file collapsed into a bucket is numbered as the bucket, and only files that mention the package, StyleX or an aliased package take numbers) through the new seedFileMap, so identical builds give identical class prefixes, CSS file names and output hashes; in development, files that appear later are numbered after the existing ones. Styles are given class names in a fixed order, not the order of a hash set. The exported class, file and canonical maps are canonical JSON (sorted keys). Stylesheet evaluation (vanilla-extract) refuses Math.random(), Date.now(), new Date() and Date(), which differ between builds, with a build error; fixed dates such as new Date(0) are unchanged. resetBuildState starts a build from its own options: the prefix, atom hoisting, routes, buckets, names, numbers and styles an earlier build in the process left are cleared, and the prefix is set on every setup even when it is absent. Engine snapshots from concurrent transforms are written one after another per file, so an older snapshot is never written last. File lists are ordered by code point rather than the locale
  • Use bundler project roots and active export conditions for build-time module resolution, resolve inherited tsconfig paths and dotted module specifiers, transform modern modules and compiled MDX, match included packages literally, and refresh empty theme declarations. Skip unrequested source maps, surface resolver faults before stylesheet mutation, and report WASM panic locations. Malformed or cyclic configuration, resolver failures, requested graph/prewarm failures and disabled Rsbuild shared splitting now stop builds with context; optional numbering fallback warns about its deterministic impact. Bun defaults to compact names and retains imported build-time dependency watch edges.

@devup-ui/plugin-utils@1.0.17 → 1.0.18 - packages/plugin-utils/package.json

Patch

  • Webpack and Rsbuild builds hold every style in their stylesheets: a stylesheet module is built on its first import, so styles extracted later (the global styles of files webpack or Rsbuild reached late, often outside src) were missing from the output. The files the entries reach under src are now extracted before the build, the shared base on disk is kept current, and when a stylesheet still changed during the build it is compiled once more, writing only the complete result. Rsbuild serves each stylesheet from the current sheet instead of a module-wide string kept only when it grew, which left edits that shortened the CSS and later builds in the same process stale. plugin-utils adds computeReachableFiles
  • Class names and file numbers no longer depend on the order files are processed in. Every plugin walks the files it can extract (the project's source and the included packages) before the first transform and numbers them in path order (a file collapsed into a bucket is numbered as the bucket, and only files that mention the package, StyleX or an aliased package take numbers) through the new seedFileMap, so identical builds give identical class prefixes, CSS file names and output hashes; in development, files that appear later are numbered after the existing ones. Styles are given class names in a fixed order, not the order of a hash set. The exported class, file and canonical maps are canonical JSON (sorted keys). Stylesheet evaluation (vanilla-extract) refuses Math.random(), Date.now(), new Date() and Date(), which differ between builds, with a build error; fixed dates such as new Date(0) are unchanged. resetBuildState starts a build from its own options: the prefix, atom hoisting, routes, buckets, names, numbers and styles an earlier build in the process left are cleared, and the prefix is set on every setup even when it is absent. Engine snapshots from concurrent transforms are written one after another per file, so an older snapshot is never written last. File lists are ordered by code point rather than the locale
  • Use bundler project roots and active export conditions for build-time module resolution, resolve inherited tsconfig paths and dotted module specifiers, transform modern modules and compiled MDX, match included packages literally, and refresh empty theme declarations. Skip unrequested source maps, surface resolver faults before stylesheet mutation, and report WASM panic locations. Malformed or cyclic configuration, resolver failures, requested graph/prewarm failures and disabled Rsbuild shared splitting now stop builds with context; optional numbering fallback warns about its deterministic impact. Bun defaults to compact names and retains imported build-time dependency watch edges.
  • Keep raw MDX out of static import graphs unless the caller compiles MDX before extraction, preserving Next production prewarm behavior while MDX-aware plugins opt in. Normalize Webpack inline-loader entry resources before filesystem lookup and skip virtual or pitch-only entries without swallowing real I/O failures. Isolate watched-config regression diagnostics while preserving the prior theme on invalid configuration. No new build-error category is introduced.

@devup-ui/rsbuild-plugin@1.0.67 → 1.0.68 - packages/rsbuild-plugin/package.json

Patch

  • Webpack and Rsbuild builds hold every style in their stylesheets: a stylesheet module is built on its first import, so styles extracted later (the global styles of files webpack or Rsbuild reached late, often outside src) were missing from the output. The files the entries reach under src are now extracted before the build, the shared base on disk is kept current, and when a stylesheet still changed during the build it is compiled once more, writing only the complete result. Rsbuild serves each stylesheet from the current sheet instead of a module-wide string kept only when it grew, which left edits that shortened the CSS and later builds in the same process stale. plugin-utils adds computeReachableFiles
  • Class names and file numbers no longer depend on the order files are processed in. Every plugin walks the files it can extract (the project's source and the included packages) before the first transform and numbers them in path order (a file collapsed into a bucket is numbered as the bucket, and only files that mention the package, StyleX or an aliased package take numbers) through the new seedFileMap, so identical builds give identical class prefixes, CSS file names and output hashes; in development, files that appear later are numbered after the existing ones. Styles are given class names in a fixed order, not the order of a hash set. The exported class, file and canonical maps are canonical JSON (sorted keys). Stylesheet evaluation (vanilla-extract) refuses Math.random(), Date.now(), new Date() and Date(), which differ between builds, with a build error; fixed dates such as new Date(0) are unchanged. resetBuildState starts a build from its own options: the prefix, atom hoisting, routes, buckets, names, numbers and styles an earlier build in the process left are cleared, and the prefix is set on every setup even when it is absent. Engine snapshots from concurrent transforms are written one after another per file, so an older snapshot is never written last. File lists are ordered by code point rather than the locale
  • Use bundler project roots and active export conditions for build-time module resolution, resolve inherited tsconfig paths and dotted module specifiers, transform modern modules and compiled MDX, match included packages literally, and refresh empty theme declarations. Skip unrequested source maps, surface resolver faults before stylesheet mutation, and report WASM panic locations. Malformed or cyclic configuration, resolver failures, requested graph/prewarm failures and disabled Rsbuild shared splitting now stop builds with context; optional numbering fallback warns about its deterministic impact. Bun defaults to compact names and retains imported build-time dependency watch edges.
  • Keep raw MDX out of static import graphs unless the caller compiles MDX before extraction, preserving Next production prewarm behavior while MDX-aware plugins opt in. Normalize Webpack inline-loader entry resources before filesystem lookup and skip virtual or pitch-only entries without swallowing real I/O failures. Isolate watched-config regression diagnostics while preserving the prior theme on invalid configuration. No new build-error category is introduced.

@devup-ui/vite-plugin@1.0.73 → 1.0.74 - packages/vite-plugin/package.json

Patch

  • Class names and file numbers no longer depend on the order files are processed in. Every plugin walks the files it can extract (the project's source and the included packages) before the first transform and numbers them in path order (a file collapsed into a bucket is numbered as the bucket, and only files that mention the package, StyleX or an aliased package take numbers) through the new seedFileMap, so identical builds give identical class prefixes, CSS file names and output hashes; in development, files that appear later are numbered after the existing ones. Styles are given class names in a fixed order, not the order of a hash set. The exported class, file and canonical maps are canonical JSON (sorted keys). Stylesheet evaluation (vanilla-extract) refuses Math.random(), Date.now(), new Date() and Date(), which differ between builds, with a build error; fixed dates such as new Date(0) are unchanged. resetBuildState starts a build from its own options: the prefix, atom hoisting, routes, buckets, names, numbers and styles an earlier build in the process left are cleared, and the prefix is set on every setup even when it is absent. Engine snapshots from concurrent transforms are written one after another per file, so an older snapshot is never written last. File lists are ordered by code point rather than the locale
  • Use bundler project roots and active export conditions for build-time module resolution, resolve inherited tsconfig paths and dotted module specifiers, transform modern modules and compiled MDX, match included packages literally, and refresh empty theme declarations. Skip unrequested source maps, surface resolver faults before stylesheet mutation, and report WASM panic locations. Malformed or cyclic configuration, resolver failures, requested graph/prewarm failures and disabled Rsbuild shared splitting now stop builds with context; optional numbering fallback warns about its deterministic impact. Bun defaults to compact names and retains imported build-time dependency watch edges.
  • Keep raw MDX out of static import graphs unless the caller compiles MDX before extraction, preserving Next production prewarm behavior while MDX-aware plugins opt in. Normalize Webpack inline-loader entry resources before filesystem lookup and skip virtual or pitch-only entries without swallowing real I/O failures. Isolate watched-config regression diagnostics while preserving the prior theme on invalid configuration. No new build-error category is introduced.

@devup-ui/webpack-plugin@1.0.71 → 1.0.72 - packages/webpack-plugin/package.json

Patch

  • Webpack and Rsbuild builds hold every style in their stylesheets: a stylesheet module is built on its first import, so styles extracted later (the global styles of files webpack or Rsbuild reached late, often outside src) were missing from the output. The files the entries reach under src are now extracted before the build, the shared base on disk is kept current, and when a stylesheet still changed during the build it is compiled once more, writing only the complete result. Rsbuild serves each stylesheet from the current sheet instead of a module-wide string kept only when it grew, which left edits that shortened the CSS and later builds in the same process stale. plugin-utils adds computeReachableFiles
  • Class names and file numbers no longer depend on the order files are processed in. Every plugin walks the files it can extract (the project's source and the included packages) before the first transform and numbers them in path order (a file collapsed into a bucket is numbered as the bucket, and only files that mention the package, StyleX or an aliased package take numbers) through the new seedFileMap, so identical builds give identical class prefixes, CSS file names and output hashes; in development, files that appear later are numbered after the existing ones. Styles are given class names in a fixed order, not the order of a hash set. The exported class, file and canonical maps are canonical JSON (sorted keys). Stylesheet evaluation (vanilla-extract) refuses Math.random(), Date.now(), new Date() and Date(), which differ between builds, with a build error; fixed dates such as new Date(0) are unchanged. resetBuildState starts a build from its own options: the prefix, atom hoisting, routes, buckets, names, numbers and styles an earlier build in the process left are cleared, and the prefix is set on every setup even when it is absent. Engine snapshots from concurrent transforms are written one after another per file, so an older snapshot is never written last. File lists are ordered by code point rather than the locale
  • Use bundler project roots and active export conditions for build-time module resolution, resolve inherited tsconfig paths and dotted module specifiers, transform modern modules and compiled MDX, match included packages literally, and refresh empty theme declarations. Skip unrequested source maps, surface resolver faults before stylesheet mutation, and report WASM panic locations. Malformed or cyclic configuration, resolver failures, requested graph/prewarm failures and disabled Rsbuild shared splitting now stop builds with context; optional numbering fallback warns about its deterministic impact. Bun defaults to compact names and retains imported build-time dependency watch edges.
  • Keep raw MDX out of static import graphs unless the caller compiles MDX before extraction, preserving Next production prewarm behavior while MDX-aware plugins opt in. Normalize Webpack inline-loader entry resources before filesystem lookup and skip virtual or pitch-only entries without swallowing real I/O failures. Isolate watched-config regression diagnostics while preserving the prior theme on invalid configuration. No new build-error category is introduced.

@codecov

codecov Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
bindings/devup-ui-wasm/src/lib.rs 100.00% <100.00%> (ø)
bun.preload.ts 100.00% <100.00%> (ø)
libs/css/src/file_map.rs 100.00% <100.00%> (ø)
libs/extractor/src/build_time_values.rs 100.00% <100.00%> (ø)
libs/extractor/src/import_alias_visit.rs 100.00% <100.00%> (ø)
libs/extractor/src/imported_constants.rs 100.00% <100.00%> (ø)
libs/extractor/src/imported_constants/exports.rs 100.00% <100.00%> (ø)
libs/extractor/src/lib.rs 100.00% <100.00%> (ø)
libs/extractor/src/module_loader.rs 100.00% <100.00%> (ø)
libs/extractor/src/source_type.rs 100.00% <100.00%> (ø)
... and 56 more

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

owjs3901 and others added 4 commits October 5, 2026 01:22
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 and others added 9 commits October 5, 2026 05:16
…es and exclusions

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…rors

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ite proof

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 added a commit that referenced this pull request Oct 5, 2026
Refs #686 #694 #755

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 and others added 2 commits October 6, 2026 05:31
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 and others added 4 commits October 6, 2026 10:41
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 added a commit that referenced this pull request Oct 6, 2026
Refs #686, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant